package com.android.support.lib.universal.sdk.qq;

import java.util.ArrayList;

import org.json.JSONObject;

import com.android.support.lib.universal.R;
import com.android.support.lib.universal.listenner.BaseListenner;
import com.android.support.lib.universal.sdk.qq.mobies.Msg;
import com.android.support.lib.universal.sdk.qq.mobies.User;
import com.android.support.lib.universal.util.UtilFastjson;
import com.android.support.lib.universal.util.Utilview;
import com.android.support.lib.universal.view.dialog.CustomProgressDialog;
import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

import android.app.Activity;
import android.content.Intent;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;

/**
 * 实现回调 IUiListener 例如：登录、快速支付登录、应用分享、应用邀请等接口，需传入该回调的实例。
 * <p/>
 * 注意，应用未上线时，只允许 QQ授权应用调试者调用。最多100个吧。
 * <p/>
 * 设置授权监听接口,授权成功后会返回用户信息
 * QqActivity.setListenner(new BaseListenner<User>() {});
 *
 * @author 彭治铭
 */
public class QqActivity extends Activity implements IUiListener {

    public static UtilFastjson util = new UtilFastjson();// json数据转化
    private CustomProgressDialog progressDialog;// 进度条

//    String AppId = "1104815457";// 末端
//    String AppKey = "vORt38ts9liIJ3iO";

    String AppId = "1104910265";// 游戏热
    String AppKey = "uBG6G68STEspHl0g";

    String SCOPE = "all";// 应用需要获得哪些API的权限，由“，”分隔。
    // 例如：SCOPE=“get_user_info,add_t”；所有权限用“all”
    static Tencent mTencent;
    String openId;//授权登录成功后，返回的用户唯一标示

    // 用户信息
    public static User user;
    // 参数信息
    public static Msg msg;

    //回调接口
    public static BaseListenner<User> listenner;

    //设置回调接口
    public static void setListenner(BaseListenner<User> listenner) {
        QqActivity.listenner = listenner;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 手机SDK版本要求在4.4及以上
        if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
            // 透明状态栏.这样状态栏的颜色就会变的和背景色一样
            getWindow().addFlags(
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 透明导航栏
            getWindow().addFlags(
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
        setContentView(R.layout.lib_activity_sdk_qq);
        // Tencent类是SDK的主要实现类，开发者可通过Tencent类访问腾讯开放的OpenAPI。
        // 其中APP_ID是分配给第三方应用的appid，类型为String。
        mTencent = Tencent.createInstance(AppId, this);

        progressDialog = CustomProgressDialog.createDialog(this);
        progressDialog.show();

        // QQ登录
        login();

        // 分享
        findViewById(R.id.imageView1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // QqShare.onClickShareMsg(QqActivity.this, mTencent,
                // "还记得吗？那份铭刻于心的感动……还记得吗？那段还未完结的旅程……",
                // "何为善？何为恶？何为爱？何为恨？在真实之扉开启的那一刻，你的世界，已然成为我梦中的倒影……《刻痕3》境璃夏《刻痕3》境璃夏一直在向往着那片永不褪色的蔚蓝天空的你，此时此刻，是否依然在欢笑？",
                // "http://baike.baidu.com/link?url=l0xwe5rpIsnNUc1CBWenUSjqfyP_k9NQqFL1ercVRIHkIRzx6WNSd00OQU4DP7yLc7l9RDCML-A4NBfeX-t3Bq",
                // "http://b.hiphotos.baidu.com/zhidao/wh%3D600%2C800/sign=7f405fc44bed2e73fcbc8e2ab7318db3/fd039245d688d43fceae21b27c1ed21b0ef43b6e.jpg",
                // "彭治铭");
                // QqShare.onClickShareImg(QqActivity.this, mTencent,
                // android.os.Environment
                // .getExternalStorageDirectory().getAbsolutePath()+"/"+"00.jpg",
                // "彭治铭",true);

                // QqShare.onClickAudioShareMusic(QqActivity.this,
                // mTencent,"心疼2011", "王锦军",
                // "http://baike.baidu.com/link?url=l0xwe5rpIsnNUc1CBWenUSjqfyP_k9NQqFL1ercVRIHkIRzx6WNSd00OQU4DP7yLc7l9RDCML-A4NBfeX-t3Bq",
                // "http://b174.photo.store.qq.com/psb?/V12KQIXD2cI6Yw/.ZGRMjSDXwWTJ40NPPLrCUPjI4jcdEGR3CsH*Ra1oRQ!/b/dFygwmdLEAAA&bo=gAJVAwAAAAABB*Q!&rf=viewer_4",
                // "http://data.music.qq.com/playsong.html?songid=1265182&source=qq",
                // "彭治铭");
                // QqShare.onClickAppShareApp(QqActivity.this, mTencent,false);

//				ArrayList arraylist = new ArrayList<String>();
//				arraylist
//						.add("http://imgsrc.baidu.com/forum/w=580/sign=defb58627b310a55c424defc87444387/685c43a98226cffc37da7d23bb014a90f703ea4d.jpg");
//				String url = "http://baike.baidu.com/link?url=FO40xjq-15XP8IOPHAx3Ea3bemu6P0v9RF7N2eFD_NRsQ41b_kP0rtF6NVJhdiB2joZLLu2eerGDqJ5GeBGafK";
//				QqShare.shareToQzone(QqActivity.this, mTencent, "一方通行",
//						"学院都市NO:1", url, arraylist);

            }
        });
    }

    @Override
    public void onCancel() {
        // 用户取消
        progressDialog.dismiss();
        this.finish();
    }

    @Override
    public void onComplete(Object response) {
        // 授权登录完成,保存必要参数。必不可少,否则获取用户信息失败
        try {
            JSONObject jsonObject = (JSONObject) response;
            String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
            String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
            openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
            if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                    && !TextUtils.isEmpty(openId)) {
                mTencent.setAccessToken(token, expires);
                mTencent.setOpenId(openId);
            }
        } catch (Exception e) {
        }
        // 保存参数和获取用户数据
        String json = response.toString();
        msg = util.getEntity(json, Msg.class);
        getUserInfo();

        progressDialog.dismiss();
    }

    @Override
    public void onError(UiError e) {
        // 异常错误
        Log.e("QQ错误信息:", "code:" + e.errorCode + ", msg:" + e.errorMessage
                + ", detail:" + e.errorDetail);
        progressDialog.dismiss();
        if (listenner != null) {
            listenner.onFailure(null);
        }
        Utilview.showToastView("QQ授权失败");
        this.finish();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        /**
         * 应用调用Andriod_SDK接口时，如果要成功接收到回调，
         * 需要在调用接口的Activity的onActivityResult方法中增加如下代码：
         * 其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。
         */
        Tencent.onActivityResultData(requestCode, resultCode, data, this);

        /**
         * 在某些低端机上调用登录后，由于内存紧张导致APP被系统回收，登录成功后无法成功回传数据。 解决办法如下
         * 在调用login的Activity或者Fragment重写onActivityResult方法，示例代码如下：
         */
        if (requestCode == Constants.REQUEST_API) {
            if (resultCode == Constants.RESULT_LOGIN) {
                mTencent.handleLoginData(data, this);
            }
        }
    }

    /**
     * QQ登录
     */
    public void login() {
        mTencent = Tencent.createInstance(AppId, this.getApplicationContext());
        if (!mTencent.isSessionValid()) {
            // mTencent.login(this, SCOPE, this);
            mTencent.login(this, "all", this);
        }

    }

    /**
     * QQ登录注销
     */
    public void logout() {
        mTencent.logout(this);
    }

    /**
     * 获取用户信息
     */
    public void getUserInfo() {
        final UserInfo info = new UserInfo(QqActivity.this,
                mTencent.getQQToken());

        info.getUserInfo(new IUiListener() {

            @Override
            public void onError(UiError arg0) {
                // TODO Auto-generated method stub
                Log.e("获取QQ用户信息失败", "错误信息" + arg0.toString());
            }

            @Override
            public void onComplete(Object arg0) {
                // TODO Auto-generated method stub

                String json = arg0.toString();
                //Log.e("test", "数据"+openId +"    JSON:   "+ json);
                user = util.getEntity(json, User.class);
                user.setOpenId(openId);
                //Log.e("图形", "空间图形" + user.getFigureurl());
                //Log.e("图形", "QQ图形" + user.getFigureurl_qq_1());

                if (listenner != null) {
                    listenner.onSuccess(user);
                }
                //注销登录
                logout();
                QqActivity.this.finish();
            }

            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                Log.e("取消获取用户信息", "取消获取QQ用户信息");
            }
        });
    }
}
